{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Group Data\n",
    "> 20190505 Last Modified By: ZeFeng Zhu\n",
    "\n",
    "### Method\n",
    "* split()\n",
    "* unstack()\n",
    "* which()\n",
    "* by()\n",
    "* tapply()\n",
    "* initial codes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<dl>\n",
       "\t<dt>$USA</dt>\n",
       "\t\t<dd><ol class=list-inline>\n",
       "\t<li>22</li>\n",
       "\t<li>19</li>\n",
       "\t<li>16</li>\n",
       "\t<li>19</li>\n",
       "\t<li>16</li>\n",
       "\t<li>16</li>\n",
       "\t<li>25</li>\n",
       "\t<li>25</li>\n",
       "\t<li>19</li>\n",
       "\t<li>21</li>\n",
       "\t<li>18</li>\n",
       "\t<li>15</li>\n",
       "\t<li>17</li>\n",
       "\t<li>17</li>\n",
       "\t<li>20</li>\n",
       "\t<li>23</li>\n",
       "\t<li>20</li>\n",
       "\t<li>29</li>\n",
       "\t<li>23</li>\n",
       "\t<li>22</li>\n",
       "\t<li>17</li>\n",
       "\t<li>21</li>\n",
       "\t<li>18</li>\n",
       "\t<li>29</li>\n",
       "\t<li>20</li>\n",
       "\t<li>31</li>\n",
       "\t<li>23</li>\n",
       "\t<li>22</li>\n",
       "\t<li>22</li>\n",
       "\t<li>24</li>\n",
       "\t<li>15</li>\n",
       "\t<li>21</li>\n",
       "\t<li>18</li>\n",
       "\t<li>17</li>\n",
       "\t<li>18</li>\n",
       "\t<li>23</li>\n",
       "\t<li>19</li>\n",
       "\t<li>24</li>\n",
       "\t<li>23</li>\n",
       "\t<li>18</li>\n",
       "\t<li>19</li>\n",
       "\t<li>23</li>\n",
       "\t<li>31</li>\n",
       "\t<li>23</li>\n",
       "\t<li>19</li>\n",
       "\t<li>19</li>\n",
       "\t<li>19</li>\n",
       "\t<li>28</li>\n",
       "</ol>\n",
       "</dd>\n",
       "\t<dt>$`non-USA`</dt>\n",
       "\t\t<dd><ol class=list-inline>\n",
       "\t<li>25</li>\n",
       "\t<li>18</li>\n",
       "\t<li>20</li>\n",
       "\t<li>19</li>\n",
       "\t<li>22</li>\n",
       "\t<li>46</li>\n",
       "\t<li>30</li>\n",
       "\t<li>24</li>\n",
       "\t<li>42</li>\n",
       "\t<li>24</li>\n",
       "\t<li>29</li>\n",
       "\t<li>22</li>\n",
       "\t<li>26</li>\n",
       "\t<li>20</li>\n",
       "\t<li>17</li>\n",
       "\t<li>18</li>\n",
       "\t<li>18</li>\n",
       "\t<li>29</li>\n",
       "\t<li>28</li>\n",
       "\t<li>26</li>\n",
       "\t<li>18</li>\n",
       "\t<li>17</li>\n",
       "\t<li>20</li>\n",
       "\t<li>19</li>\n",
       "\t<li>29</li>\n",
       "\t<li>18</li>\n",
       "\t<li>29</li>\n",
       "\t<li>24</li>\n",
       "\t<li>17</li>\n",
       "\t<li>21</li>\n",
       "\t<li>20</li>\n",
       "\t<li>33</li>\n",
       "\t<li>25</li>\n",
       "\t<li>23</li>\n",
       "\t<li>39</li>\n",
       "\t<li>32</li>\n",
       "\t<li>25</li>\n",
       "\t<li>22</li>\n",
       "\t<li>18</li>\n",
       "\t<li>25</li>\n",
       "\t<li>17</li>\n",
       "\t<li>21</li>\n",
       "\t<li>18</li>\n",
       "\t<li>21</li>\n",
       "\t<li>20</li>\n",
       "</ol>\n",
       "</dd>\n",
       "</dl>\n"
      ],
      "text/latex": [
       "\\begin{description}\n",
       "\\item[\\$USA] \\begin{enumerate*}\n",
       "\\item 22\n",
       "\\item 19\n",
       "\\item 16\n",
       "\\item 19\n",
       "\\item 16\n",
       "\\item 16\n",
       "\\item 25\n",
       "\\item 25\n",
       "\\item 19\n",
       "\\item 21\n",
       "\\item 18\n",
       "\\item 15\n",
       "\\item 17\n",
       "\\item 17\n",
       "\\item 20\n",
       "\\item 23\n",
       "\\item 20\n",
       "\\item 29\n",
       "\\item 23\n",
       "\\item 22\n",
       "\\item 17\n",
       "\\item 21\n",
       "\\item 18\n",
       "\\item 29\n",
       "\\item 20\n",
       "\\item 31\n",
       "\\item 23\n",
       "\\item 22\n",
       "\\item 22\n",
       "\\item 24\n",
       "\\item 15\n",
       "\\item 21\n",
       "\\item 18\n",
       "\\item 17\n",
       "\\item 18\n",
       "\\item 23\n",
       "\\item 19\n",
       "\\item 24\n",
       "\\item 23\n",
       "\\item 18\n",
       "\\item 19\n",
       "\\item 23\n",
       "\\item 31\n",
       "\\item 23\n",
       "\\item 19\n",
       "\\item 19\n",
       "\\item 19\n",
       "\\item 28\n",
       "\\end{enumerate*}\n",
       "\n",
       "\\item[\\$`non-USA`] \\begin{enumerate*}\n",
       "\\item 25\n",
       "\\item 18\n",
       "\\item 20\n",
       "\\item 19\n",
       "\\item 22\n",
       "\\item 46\n",
       "\\item 30\n",
       "\\item 24\n",
       "\\item 42\n",
       "\\item 24\n",
       "\\item 29\n",
       "\\item 22\n",
       "\\item 26\n",
       "\\item 20\n",
       "\\item 17\n",
       "\\item 18\n",
       "\\item 18\n",
       "\\item 29\n",
       "\\item 28\n",
       "\\item 26\n",
       "\\item 18\n",
       "\\item 17\n",
       "\\item 20\n",
       "\\item 19\n",
       "\\item 29\n",
       "\\item 18\n",
       "\\item 29\n",
       "\\item 24\n",
       "\\item 17\n",
       "\\item 21\n",
       "\\item 20\n",
       "\\item 33\n",
       "\\item 25\n",
       "\\item 23\n",
       "\\item 39\n",
       "\\item 32\n",
       "\\item 25\n",
       "\\item 22\n",
       "\\item 18\n",
       "\\item 25\n",
       "\\item 17\n",
       "\\item 21\n",
       "\\item 18\n",
       "\\item 21\n",
       "\\item 20\n",
       "\\end{enumerate*}\n",
       "\n",
       "\\end{description}\n"
      ],
      "text/markdown": [
       "$USA\n",
       ":   1. 22\n",
       "2. 19\n",
       "3. 16\n",
       "4. 19\n",
       "5. 16\n",
       "6. 16\n",
       "7. 25\n",
       "8. 25\n",
       "9. 19\n",
       "10. 21\n",
       "11. 18\n",
       "12. 15\n",
       "13. 17\n",
       "14. 17\n",
       "15. 20\n",
       "16. 23\n",
       "17. 20\n",
       "18. 29\n",
       "19. 23\n",
       "20. 22\n",
       "21. 17\n",
       "22. 21\n",
       "23. 18\n",
       "24. 29\n",
       "25. 20\n",
       "26. 31\n",
       "27. 23\n",
       "28. 22\n",
       "29. 22\n",
       "30. 24\n",
       "31. 15\n",
       "32. 21\n",
       "33. 18\n",
       "34. 17\n",
       "35. 18\n",
       "36. 23\n",
       "37. 19\n",
       "38. 24\n",
       "39. 23\n",
       "40. 18\n",
       "41. 19\n",
       "42. 23\n",
       "43. 31\n",
       "44. 23\n",
       "45. 19\n",
       "46. 19\n",
       "47. 19\n",
       "48. 28\n",
       "\n",
       "\n",
       "\n",
       "$`non-USA`\n",
       ":   1. 25\n",
       "2. 18\n",
       "3. 20\n",
       "4. 19\n",
       "5. 22\n",
       "6. 46\n",
       "7. 30\n",
       "8. 24\n",
       "9. 42\n",
       "10. 24\n",
       "11. 29\n",
       "12. 22\n",
       "13. 26\n",
       "14. 20\n",
       "15. 17\n",
       "16. 18\n",
       "17. 18\n",
       "18. 29\n",
       "19. 28\n",
       "20. 26\n",
       "21. 18\n",
       "22. 17\n",
       "23. 20\n",
       "24. 19\n",
       "25. 29\n",
       "26. 18\n",
       "27. 29\n",
       "28. 24\n",
       "29. 17\n",
       "30. 21\n",
       "31. 20\n",
       "32. 33\n",
       "33. 25\n",
       "34. 23\n",
       "35. 39\n",
       "36. 32\n",
       "37. 25\n",
       "38. 22\n",
       "39. 18\n",
       "40. 25\n",
       "41. 17\n",
       "42. 21\n",
       "43. 18\n",
       "44. 21\n",
       "45. 20\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "$USA\n",
       " [1] 22 19 16 19 16 16 25 25 19 21 18 15 17 17 20 23 20 29 23 22 17 21 18 29 20\n",
       "[26] 31 23 22 22 24 15 21 18 17 18 23 19 24 23 18 19 23 31 23 19 19 19 28\n",
       "\n",
       "$`non-USA`\n",
       " [1] 25 18 20 19 22 46 30 24 42 24 29 22 26 20 17 18 18 29 28 26 18 17 20 19 29\n",
       "[26] 18 29 24 17 21 20 33 25 23 39 32 25 22 18 25 17 21 18 21 20\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20 22"
     ]
    }
   ],
   "source": [
    "library(MASS)\n",
    "g1 <- split(Cars93$MPG.city, Cars93$Origin)\n",
    "g1\n",
    "cat(median(g1[[1]]),median(g1[[2]]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<dl>\n",
       "\t<dt>$USA</dt>\n",
       "\t\t<dd><ol class=list-inline>\n",
       "\t<li>22</li>\n",
       "\t<li>19</li>\n",
       "\t<li>16</li>\n",
       "\t<li>19</li>\n",
       "\t<li>16</li>\n",
       "\t<li>16</li>\n",
       "\t<li>25</li>\n",
       "\t<li>25</li>\n",
       "\t<li>19</li>\n",
       "\t<li>21</li>\n",
       "\t<li>18</li>\n",
       "\t<li>15</li>\n",
       "\t<li>17</li>\n",
       "\t<li>17</li>\n",
       "\t<li>20</li>\n",
       "\t<li>23</li>\n",
       "\t<li>20</li>\n",
       "\t<li>29</li>\n",
       "\t<li>23</li>\n",
       "\t<li>22</li>\n",
       "\t<li>17</li>\n",
       "\t<li>21</li>\n",
       "\t<li>18</li>\n",
       "\t<li>29</li>\n",
       "\t<li>20</li>\n",
       "\t<li>31</li>\n",
       "\t<li>23</li>\n",
       "\t<li>22</li>\n",
       "\t<li>22</li>\n",
       "\t<li>24</li>\n",
       "\t<li>15</li>\n",
       "\t<li>21</li>\n",
       "\t<li>18</li>\n",
       "\t<li>17</li>\n",
       "\t<li>18</li>\n",
       "\t<li>23</li>\n",
       "\t<li>19</li>\n",
       "\t<li>24</li>\n",
       "\t<li>23</li>\n",
       "\t<li>18</li>\n",
       "\t<li>19</li>\n",
       "\t<li>23</li>\n",
       "\t<li>31</li>\n",
       "\t<li>23</li>\n",
       "\t<li>19</li>\n",
       "\t<li>19</li>\n",
       "\t<li>19</li>\n",
       "\t<li>28</li>\n",
       "</ol>\n",
       "</dd>\n",
       "\t<dt>$`non-USA`</dt>\n",
       "\t\t<dd><ol class=list-inline>\n",
       "\t<li>25</li>\n",
       "\t<li>18</li>\n",
       "\t<li>20</li>\n",
       "\t<li>19</li>\n",
       "\t<li>22</li>\n",
       "\t<li>46</li>\n",
       "\t<li>30</li>\n",
       "\t<li>24</li>\n",
       "\t<li>42</li>\n",
       "\t<li>24</li>\n",
       "\t<li>29</li>\n",
       "\t<li>22</li>\n",
       "\t<li>26</li>\n",
       "\t<li>20</li>\n",
       "\t<li>17</li>\n",
       "\t<li>18</li>\n",
       "\t<li>18</li>\n",
       "\t<li>29</li>\n",
       "\t<li>28</li>\n",
       "\t<li>26</li>\n",
       "\t<li>18</li>\n",
       "\t<li>17</li>\n",
       "\t<li>20</li>\n",
       "\t<li>19</li>\n",
       "\t<li>29</li>\n",
       "\t<li>18</li>\n",
       "\t<li>29</li>\n",
       "\t<li>24</li>\n",
       "\t<li>17</li>\n",
       "\t<li>21</li>\n",
       "\t<li>20</li>\n",
       "\t<li>33</li>\n",
       "\t<li>25</li>\n",
       "\t<li>23</li>\n",
       "\t<li>39</li>\n",
       "\t<li>32</li>\n",
       "\t<li>25</li>\n",
       "\t<li>22</li>\n",
       "\t<li>18</li>\n",
       "\t<li>25</li>\n",
       "\t<li>17</li>\n",
       "\t<li>21</li>\n",
       "\t<li>18</li>\n",
       "\t<li>21</li>\n",
       "\t<li>20</li>\n",
       "</ol>\n",
       "</dd>\n",
       "</dl>\n"
      ],
      "text/latex": [
       "\\begin{description}\n",
       "\\item[\\$USA] \\begin{enumerate*}\n",
       "\\item 22\n",
       "\\item 19\n",
       "\\item 16\n",
       "\\item 19\n",
       "\\item 16\n",
       "\\item 16\n",
       "\\item 25\n",
       "\\item 25\n",
       "\\item 19\n",
       "\\item 21\n",
       "\\item 18\n",
       "\\item 15\n",
       "\\item 17\n",
       "\\item 17\n",
       "\\item 20\n",
       "\\item 23\n",
       "\\item 20\n",
       "\\item 29\n",
       "\\item 23\n",
       "\\item 22\n",
       "\\item 17\n",
       "\\item 21\n",
       "\\item 18\n",
       "\\item 29\n",
       "\\item 20\n",
       "\\item 31\n",
       "\\item 23\n",
       "\\item 22\n",
       "\\item 22\n",
       "\\item 24\n",
       "\\item 15\n",
       "\\item 21\n",
       "\\item 18\n",
       "\\item 17\n",
       "\\item 18\n",
       "\\item 23\n",
       "\\item 19\n",
       "\\item 24\n",
       "\\item 23\n",
       "\\item 18\n",
       "\\item 19\n",
       "\\item 23\n",
       "\\item 31\n",
       "\\item 23\n",
       "\\item 19\n",
       "\\item 19\n",
       "\\item 19\n",
       "\\item 28\n",
       "\\end{enumerate*}\n",
       "\n",
       "\\item[\\$`non-USA`] \\begin{enumerate*}\n",
       "\\item 25\n",
       "\\item 18\n",
       "\\item 20\n",
       "\\item 19\n",
       "\\item 22\n",
       "\\item 46\n",
       "\\item 30\n",
       "\\item 24\n",
       "\\item 42\n",
       "\\item 24\n",
       "\\item 29\n",
       "\\item 22\n",
       "\\item 26\n",
       "\\item 20\n",
       "\\item 17\n",
       "\\item 18\n",
       "\\item 18\n",
       "\\item 29\n",
       "\\item 28\n",
       "\\item 26\n",
       "\\item 18\n",
       "\\item 17\n",
       "\\item 20\n",
       "\\item 19\n",
       "\\item 29\n",
       "\\item 18\n",
       "\\item 29\n",
       "\\item 24\n",
       "\\item 17\n",
       "\\item 21\n",
       "\\item 20\n",
       "\\item 33\n",
       "\\item 25\n",
       "\\item 23\n",
       "\\item 39\n",
       "\\item 32\n",
       "\\item 25\n",
       "\\item 22\n",
       "\\item 18\n",
       "\\item 25\n",
       "\\item 17\n",
       "\\item 21\n",
       "\\item 18\n",
       "\\item 21\n",
       "\\item 20\n",
       "\\end{enumerate*}\n",
       "\n",
       "\\end{description}\n"
      ],
      "text/markdown": [
       "$USA\n",
       ":   1. 22\n",
       "2. 19\n",
       "3. 16\n",
       "4. 19\n",
       "5. 16\n",
       "6. 16\n",
       "7. 25\n",
       "8. 25\n",
       "9. 19\n",
       "10. 21\n",
       "11. 18\n",
       "12. 15\n",
       "13. 17\n",
       "14. 17\n",
       "15. 20\n",
       "16. 23\n",
       "17. 20\n",
       "18. 29\n",
       "19. 23\n",
       "20. 22\n",
       "21. 17\n",
       "22. 21\n",
       "23. 18\n",
       "24. 29\n",
       "25. 20\n",
       "26. 31\n",
       "27. 23\n",
       "28. 22\n",
       "29. 22\n",
       "30. 24\n",
       "31. 15\n",
       "32. 21\n",
       "33. 18\n",
       "34. 17\n",
       "35. 18\n",
       "36. 23\n",
       "37. 19\n",
       "38. 24\n",
       "39. 23\n",
       "40. 18\n",
       "41. 19\n",
       "42. 23\n",
       "43. 31\n",
       "44. 23\n",
       "45. 19\n",
       "46. 19\n",
       "47. 19\n",
       "48. 28\n",
       "\n",
       "\n",
       "\n",
       "$`non-USA`\n",
       ":   1. 25\n",
       "2. 18\n",
       "3. 20\n",
       "4. 19\n",
       "5. 22\n",
       "6. 46\n",
       "7. 30\n",
       "8. 24\n",
       "9. 42\n",
       "10. 24\n",
       "11. 29\n",
       "12. 22\n",
       "13. 26\n",
       "14. 20\n",
       "15. 17\n",
       "16. 18\n",
       "17. 18\n",
       "18. 29\n",
       "19. 28\n",
       "20. 26\n",
       "21. 18\n",
       "22. 17\n",
       "23. 20\n",
       "24. 19\n",
       "25. 29\n",
       "26. 18\n",
       "27. 29\n",
       "28. 24\n",
       "29. 17\n",
       "30. 21\n",
       "31. 20\n",
       "32. 33\n",
       "33. 25\n",
       "34. 23\n",
       "35. 39\n",
       "36. 32\n",
       "37. 25\n",
       "38. 22\n",
       "39. 18\n",
       "40. 25\n",
       "41. 17\n",
       "42. 21\n",
       "43. 18\n",
       "44. 21\n",
       "45. 20\n",
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "$USA\n",
       " [1] 22 19 16 19 16 16 25 25 19 21 18 15 17 17 20 23 20 29 23 22 17 21 18 29 20\n",
       "[26] 31 23 22 22 24 15 21 18 17 18 23 19 24 23 18 19 23 31 23 19 19 19 28\n",
       "\n",
       "$`non-USA`\n",
       " [1] 25 18 20 19 22 46 30 24 42 24 29 22 26 20 17 18 18 29 28 26 18 17 20 19 29\n",
       "[26] 18 29 24 17 21 20 33 25 23 39 32 25 22 18 25 17 21 18 21 20\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20 22"
     ]
    }
   ],
   "source": [
    "g2 <- unstack(data.frame(Cars93$MPG.city, Cars93$Origin))\n",
    "g2\n",
    "cat(median(g2[[1]]),median(g2[[2]]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20 22"
     ]
    }
   ],
   "source": [
    "g_3_1 <- Cars93[which(Cars93$Origin=='USA'),]['MPG.city']\n",
    "g_3_2 <- Cars93[which(Cars93$Origin=='non-USA'),]['MPG.city']\n",
    "cat(median(g_3_1[[1]]), median(g_3_2[[1]]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Cars93$Origin: USA\n",
       "[1] 20.95833\n",
       "------------------------------------------------------------ \n",
       "Cars93$Origin: non-USA\n",
       "[1] 23.86667"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============================================================\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Cars93$Origin: USA\n",
       "   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. \n",
       "  15.00   18.00   20.00   20.96   23.00   31.00 \n",
       "------------------------------------------------------------ \n",
       "Cars93$Origin: non-USA\n",
       "   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. \n",
       "  17.00   19.00   22.00   23.87   26.00   46.00 "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============================================================\n",
      "20.95833 23.86667"
     ]
    }
   ],
   "source": [
    "g4 <- by(Cars93$MPG.city, Cars93$Origin, mean)\n",
    "g4\n",
    "cat(\"============================================================\\n\")\n",
    "g4_2 <- by(Cars93$MPG.city, Cars93$Origin, summary)\n",
    "g4_2\n",
    "cat(\"============================================================\\n\")\n",
    "cat(g4_2$USA['Mean'], g4_2[['non-USA']]['Mean'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<dl class=dl-horizontal>\n",
       "\t<dt>USA</dt>\n",
       "\t\t<dd>20.9583333333333</dd>\n",
       "\t<dt>non-USA</dt>\n",
       "\t\t<dd>23.8666666666667</dd>\n",
       "</dl>\n"
      ],
      "text/latex": [
       "\\begin{description*}\n",
       "\\item[USA] 20.9583333333333\n",
       "\\item[non-USA] 23.8666666666667\n",
       "\\end{description*}\n"
      ],
      "text/markdown": [
       "USA\n",
       ":   20.9583333333333non-USA\n",
       ":   23.8666666666667\n",
       "\n"
      ],
      "text/plain": [
       "     USA  non-USA \n",
       "20.95833 23.86667 "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "g5 <- tapply(Cars93$MPG.city, Cars93$Origin, mean)\n",
    "g5"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },
  "language_info": {
   "codemirror_mode": "r",
   "file_extension": ".r",
   "mimetype": "text/x-r-source",
   "name": "R",
   "pygments_lexer": "r",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
